package com.cskaoyan.javase.homework.day18.explain;

import org.junit.Test;

import java.io.*;
import java.util.Arrays;
import java.util.TreeMap;

/**
 * 在一个磁盘的文件里保存26个英文小写字母（乱序）
 *         比如: rsztuvijxypbmnocklwaefghdq
 *         将他们读入内存中进行字典排序(abcd...)
 *         把排好顺序的字母序列再重新追加写到磁盘的该文件中。(注意要先换一行再追加)
 *         要求用字节和字符流两种方式进行操作
 *
 * @since 09:51
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo {

    // 用字节流实现这个操作
    @Test
    public void sortAndPrint() {
        try (FileInputStream in = new FileInputStream("a.txt"); FileOutputStream out = new FileOutputStream("a.txt", true)) {
            // 1.先把这样一个乱序的字母序列读进内存中,读到一个字节数组中
            byte[] buf = new byte[26];
            int readCount = in.read(buf);
            // 2.将这个字节数组排序(自然排序
            Arrays.sort(buf);
            // 3.将排序好的字节数组,追加写到源文件中
            out.write(System.lineSeparator().getBytes());
            out.write(buf, 0, readCount);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    // 用字符流实现这个操作
    @Test
    public void sortAndPrint2() {
        BufferedReader in = null;
        BufferedWriter out = null;
        try {
            in = new BufferedReader(new FileReader("a.txt"));
            out = new BufferedWriter(new FileWriter("a.txt", true));
            // 开始进行读和写
            String str = in.readLine();
            byte[] letterList = str.getBytes();
            Arrays.sort(letterList);
            String strSorted = new String(letterList);
            out.newLine();
            out.write(strSorted);
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (in != null) {
                try {
                    in.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (out != null) {
                try {
                    out.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

}
